logo

sitemap.xml和robots.txt

Authors
  • avatar
    Name
    White Play
    Twitter

这期是一个简单的技术分享,聊一聊标题里的这两个东西,不管你是前端还是后端面试的时候可能都会或多或少涉及到seo的问题,因为毕竟是要搞网站嘛,seo是躲不掉的。

这是两个纯文本文件,面试的时候一问就可以看出来这个候选人是不是真的深入接触过c端项目的研发,看出他对seo的了解程度。

image.png

什么是sitemap.xml和robots.txt

这俩是啥呢,简单的说就是每个网站几乎必备的两个说明文档。

image.png

我们在辛辛苦苦完成了一个网站的开发,通常肯定希望会有很多的用户来访问,也就是有流量。流量哪里来,一个很大的来源是搜索引擎。

那搜索引擎怎么知道有这个网站的存在?或者聊的在深入一点,搜索引擎怎么根据关键词来提供网站列表?

那大家都知道搜索引擎是根据爬虫程序来检索网页的,爬虫程序会在各个网站去点击链接,保存网页内容。

image.png

那如果你的网站被别的网站引用了,比如友情链接,那爬虫顺着那个网站就找到了你的网站,那你的网站内容就被保存到搜索引擎的数据存储中了。这似乎省去了一些seo的工作。

image.png

但你刚建好的网站,指望别人友情链接到你这里,可能比较难。所以你可能得自己去向google这种搜索引擎提交申请,告诉搜索引擎,我这里有个网站,请你收录。

image.png

但很快有一个新的问题浮出水面。搜索引擎的爬虫怎么知道你的网站上有哪些页面有哪些内容是可以爬取的,哪些内容是不可以爬取的?比如用户的个人信息页,设置页,还有一些废弃的过期的链接,你可能就不想被爬取。

还有一种情况,就是你的网站规模特别大,比如b站有舞蹈区,有美食区,动画区,每个区都有很多视频,你不希望爬虫漫无目的的来回爬,你希望提供个内容大纲,告诉爬虫网站是怎么分类的,以提高爬虫的爬取效率。

再有比如你想说明哪些内容是每小时都更新的,欢迎爬虫每小时都来看看,哪些内容是常年不动的,爬虫你来这一次就够了,别给我增加服务器的负担。以及还有一些孤岛页面,所谓孤岛页面就是这个页面爬虫无法通过任何链接点击跳转过去,就像被隐藏起来了。那爬虫正常情况下是不知道这个页面存在的,总之你可能需要提供一个说明文档,向爬虫具体介绍你网站各个页面的情况。

看看B站的配置

robots.txt和sitemap.xml就是上文的说明文档,我们可以用b站作为例子,点开看看里面是怎么描述的。

先看robots.txt,里面第一部分如下。

User-agent: \*
Disallow: /medialist/detail/
Disallow: /index.html

解读一下是:不管是谁,禁止爬取这两个页面,第一个medialist/detail已经访问不了了,不知道为啥禁止了,第二个可能是老的网站架构,链接里带有index.html。现在不需要带着这个来访问了,所以就别爬取了,其他的各个主流搜索引擎都是欢迎爬取的。

例外的是底部的facebook和twiter(如下),b站只让爬取https://www.bilibili.com/tbhx这个页面,这个页面是一个游戏的推广页,可能是设计海外市场的推广业务。

User-agent: facebookexternalhit
Allow: /tbhx/hero

User-agent: Facebot
Allow: /tbhx/hero

User-agent: Twitterbot
Allow: /tbhx/hero

最后有一个

User-agent: \*
Disallow: /

是说其他的,上文没列举到的奇奇怪怪的小爬虫,你就别爬取了。

这属于白名单策略,避免一些比如初学者或者别有用心的小公司,直接从github下载一个爬虫,天天爬,给b站增加无意义的服务器负担。虽说爬虫可能不理会这个说明文档,但能屏蔽一些没有能力修改开源代码的人。

再看看sitemap,通过浏览器访问sitemap.xml,这里典型的sitemap套sitemap,我发现一些sitemap会重定向到404,可能只有核心内容是开发人员手动维护的,这很正常,但也仅仅是我的猜测。

但也能看到,这里会故意引导爬虫去访问ranking,这可能是引流到全站最热门最火的内容。

还有的部分可能是专门给百度的爬虫看的,告诉它有哪些分区,帮助优化爬虫工作效率。

还有这个read/detail.xml,应该是帮助搜索引擎收录一些图文专栏,其实都是很有用的,因为我们去搜索一些文章很容易就被引导到b站来了,其实也是B站给自己引流的一种方式。

最后值得补充的是,这些只是一个规范,并不是绝对的。

你可能禁止了一切,但爬虫还是不管不顾的来。你可能允许访问一切,但谷歌没收录你的域名,还是不会被爬取。

参考

https://search.google.com/search-console/

https://www.bilibili.com/sitemap.xml

https://www.bilibili.com/robots.txt

https://www.bilibili.com/sitemap/newlist.xml

https://www.sitemaps.org/protocol.html

https://developers.google.com/search/docs/crawling-indexing/sitemaps/overview

https://developers.google.com/search/docs/crawling-indexing/robots/intro